#include "TimeIntergratorFactory.h"
#include "ABM.h"
#include "AMM.h"
#include "BDF.h"
#include "Classical_RK.h"

namespace {
	template <std::size_t DIM>
	TimeIntergrator<DIM>* CreateABM(const std::size_t _p) {
		return new ABM<DIM>(_p);
	}
	
	#define DIM 6
	const bool registered_abm_6 = TimeIntergratorFactory<DIM>::Instance()->RegisterMethod("ABM", CreateABM);
	#undef DIM 


	template <std::size_t DIM>
	TimeIntergrator<DIM>* CreateAMM(const std::size_t _p) {
		return new AMM<DIM>(_p);
	}
	
	#define DIM 6
	const bool registered_amm_6 = TimeIntergratorFactory<DIM>::Instance()->RegisterMethod("AMM", CreateAMM);
	#undef DIM 

	template <std::size_t DIM>
	TimeIntergrator<DIM>* CreateBDF(const std::size_t _p) {
		return new BDF<DIM>(_p);
	}
	
	#define DIM 6
	const bool registered_bdf_6 = TimeIntergratorFactory<DIM>::Instance()->RegisterMethod("BDF", CreateBDF);
	#undef DIM 

	template <std::size_t DIM>
	TimeIntergrator<DIM>* CreateCRK(const std::size_t _p) {
		return new Classical_RK<DIM>;
	}

	#define DIM 6
	const bool registered_crk_6 = TimeIntergratorFactory<DIM>::Instance()->RegisterMethod("CRK", CreateCRK);
	#undef DIM 

};

